﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Drawing;
using Microsoft.Reporting.WebForms;



namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_NewModule : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
               
                //txtCodigo.Attributes.Add("onkeyup", "changeToUpperCase(this.id)");
                //txtCodigo.Attributes.Add("onchange", "changeToUpperCase(this.id)");
                //txtCiclo.Attributes.Add("onkeypress", "soloNumeros(event)");
                //txtCiclo.Attributes.Add("onkeydown", "soloNumeros(event)");
                //btnGuardarModulo.Attributes.Add("onclick", "this.disabled='true';");
                //btnGuardarModulo.Attributes.Add("onload", "this.disabled='false';");

                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    btnGuardarModulo.Attributes.Add("onclick", " this.disabled = true,this.value='Procesando...'; " + ClientScript.GetPostBackEventReference(btnGuardarModulo, null) + ";");
                    //Attributes.Add("OnClick", "this.value='Procesando...'");

                    CargarComboboxes();
                    CargaGrid();
                    lblvalida.Text = "";
                    lblvalida.Visible = false;
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
               
               }
            else
            {
                lblvalida.Text = "";
                lblvalida.Visible = false;
            }
            MaintainScrollPositionOnPostBack = true;
        }
        protected void btnGuardarModulo_Click(object sender, EventArgs e)
        {
            Modulos oModulos = new Modulos();
            string mensaje = "";
            if (btnGuardarModulo.Text == "Guardar Módulo")
            {
                
                string sCadena = null;
                int iLen = 0;
                int conta = 0;
                int contaString = 0;

                if (this.IsValid)
                {
                    sCadena = txtCodigo.Text;
                    iLen = txtCodigo.Text.Length;

                    for (int i = 0; i < iLen; i++)
                    {
                        if (char.IsNumber(sCadena, i))
                        {
                            conta++;
                        }
                        else
                        {
                            contaString++;
                        }
                    }
                    if (contaString == 1 && conta == 3)
                    {//
                       
                            DateTime salida;

                            if (DateTime.TryParse(txtFechaInicio.Text, out salida) && DateTime.TryParse(txtFechaFin.Text, out salida))
                            {
                                TimeSpan ts = DateTime.Parse(txtFechaFin.Text) - DateTime.Parse(txtFechaInicio.Text);
                                int diferencia = ts.Days;
                                if (diferencia > 0)
                                {
                                    oModulos.ciclo = int.Parse(txtCiclo.Text);
                                    oModulos.fechaInicio = DateTime.Parse(txtFechaInicio.Text);
                                    oModulos.fechaFin = DateTime.Parse(txtFechaFin.Text);
                                    oModulos.nivel = int.Parse(txtCodigo.Text.Substring(1, 1));
                                    oModulos.paralelo = txtCodigo.Text.Substring(2, 2);
                                    oModulos.idHorario = int.Parse(cmbListadoHorarios.SelectedValue);
                                    oModulos.idDocente = int.Parse(cmbDocentes.SelectedValue);
                                    oModulos.idUbicacion = int.Parse(cmbUbicacion.SelectedValue);
                                    oModulos.idAdmin = (int)Session["idAdminEspamIdiomasVarSession008"];
                                    if (chkVacacional.Checked)
                                    {
                                        if (chkEpecial.Checked)
                                        {
                                            ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('EL MÓDULO NO PUEDE SER VACACIONAL Y ESPECIAL AL MISMO TIEMPO')", true);
                                            Response.Redirect("UI_NewModule.aspx");
                                            lblvalida.Visible = false;
                                        }
                                        else
                                        {
                                            oModulos.tipoModulo = "V";
                                        }
                                    }
                                    else if (chkEpecial.Checked)
                                    {
                                        if (chkVacacional.Checked)
                                        {
                                            ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('EL MÓDULO NO PUEDE SER VACACIONAL Y ESPECIAL AL MISMO TIEMPO')", true);
                                            Response.Redirect("UI_NewModule.aspx");
                                            lblvalida.Visible = false;
                                        }
                                        else
                                        {
                                            oModulos.tipoModulo = "E";
                                        }
                                    }
                                    else
                                    {
                                        oModulos.tipoModulo = " ";
                                    }
                                    oModulos.codigoModulo = txtCodigo.Text.Substring(0, 1);
                                     int valor = 0;
                                    valor = oModulos.ConsultarModulos();
                                    if (valor > 0)
                                    {
                                        lblvalida.Text = "ESTE MÓDULO YA EXISTE";
                                        lblvalida.ForeColor = Color.Red;
                                        lblvalida.Visible = true;
                                        txtCodigo.Text = string.Empty;
                                    }
                                    else
                                    {
                                        if (oModulos.CompruebaIfExisteModuloByHorarioAndDocente() == "ERORRSIEXISTE")
                                        {
                                            lblvalida.Text = "ERROR EL DOCENTE SE ENCUENTRA VINCULADO A UN MODULO A LA MISMA HORA";
                                            lblvalida.ForeColor = Color.Red;
                                            lblvalida.Visible = true;
                                        }
                                        else
                                        {
                                            mensaje = oModulos.CrearModulo();
                                            lblvalida.Text = mensaje;
                                            lblvalida.Visible = true;
                                            if (mensaje == "REGISTRO DEL MODULO GUARDADO CORRECTAMENTE")
                                            {

                                                lblvalida.ForeColor = Color.Green;
                                                txtCodigo.Text = string.Empty;
                                                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('REGISTRO DEL MODULO GUARDADO CORRECTAMENTE')", true);    

                                            }
                                            else
                                            {
                                                lblvalida.ForeColor = Color.Red;
                                            }

                                            CargaGrid();
                                        }

                                       
                                    }
                                }//-----
                                else
                                {
                                    lblvalida.Text = "ERROR FECHA FINAL ES MENOR O IGUAL A LA INICIAL";
                                    lblvalida.ForeColor = Color.Red;
                                    lblvalida.Visible = true;
                                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR FECHA FINAL ES MENOR O IGUAL A LA INICIAL')", true);    

                                }

                            }
                            else
                            {
                                lblvalida.Text = "REVISE EL FORMATO DE LA FECHA";
                                lblvalida.ForeColor = Color.Red;
                                lblvalida.Visible = true;
                                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('REVISE EL FORMATO DE LA FECHA')", true);    

                            }

                    }//

                    else
                    {
                        lblvalida.Text = "ERROR EN EL FORMATO DEL CÓDIGO";
                        lblvalida.ForeColor = Color.Red;
                        lblvalida.Visible = true;
                        txtCodigo.Focus();
                        ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR EN EL FORMATO DEL CÓDIGO')", true);    

                    }
                }
                else
                {
                    lblvalida.Text = "REVISE QUE EL FORMATO DE LOS CAMPOS SEA CORRECTO";
                    lblvalida.ForeColor = Color.Red;
                    lblvalida.Visible = true;
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('REVISE QUE EL FORMATO DE LOS CAMPOS SEA CORRECTO')", true);    

                }


            }//if de guardar
            else if (btnGuardarModulo.Text == "Editar Módulo")
            {
                try
                {
                    
                    oModulos.nivel = int.Parse(txtCodigo.Text.Substring(1, 1));
                    oModulos.paralelo = txtCodigo.Text.Substring(2, 2);
                    oModulos.codigoModulo = txtCodigo.Text.Substring(0, 1);
                    if (chkVacacional.Checked)
                    {
                        oModulos.tipoModulo = "V";
                    }
                    else
                    {
                        oModulos.tipoModulo = "";
                    }
                    oModulos.idHorario = int.Parse(cmbListadoHorarios.SelectedValue);
                    oModulos.idDocente = int.Parse(cmbDocentes.SelectedValue);
                    oModulos.idUbicacion = int.Parse(cmbUbicacion.SelectedValue);
                    oModulos.idModulo = (int)(Session["idModulo"]);
                    oModulos.ciclo = int.Parse(txtCiclo.Text);
                    //int valor = 0;
                    //valor = oModulos.ConsultarModulos();
                    //if (valor > 0)
                    //{
                        lblvalida.Text = "ESTE MÓDULO YA EXISTE ERROR AL EDITAR";
                        lblvalida.ForeColor = Color.Red;
                        lblvalida.Visible = true;
                        ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ESTE MÓDULO YA EXISTE ERROR AL EDITAR')", true);    
                        
                    //}
                    //else
                    //{
                        mensaje = oModulos.EditarModulos();
                        lblvalida.Text = mensaje;
                        lblvalida.Visible = true;
                        lblvalida.ForeColor = Color.Green;
                        LimpiarFormulario();
                        CargarComboboxes();
                        NuevoModulo();
                        CargaGrid();
                        Session.Remove("idModulo");
                    //}    
                }
                catch (Exception)
                {

                    Response.Redirect("UI_NewModule.aspx");
                    lblvalida.Visible = false;
                }
                               

            }
         
        }
        

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            List<Modulos> listaEditModulo = new List<Modulos>();
            GridViewRow row = GridView1.SelectedRow;
            int id = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
            Modulos oModule = new Modulos();
            oModule.idModulo = id;
            listaEditModulo = oModule.editModulo();
            txtCiclo.Text = listaEditModulo[0].ciclo.ToString();
            txtCodigo.Text = listaEditModulo[0].codigo;
            txtFechaInicio.Text = listaEditModulo[0].fechaInicio.ToShortDateString();
            txtFechaFin.Text = listaEditModulo[0].fechaFin.ToShortDateString();
            cmbListadoHorarios.SelectedValue =listaEditModulo[0].idHorario.ToString();
            cmbDocentes.SelectedValue = listaEditModulo[0].idDocente.ToString();
            cmbUbicacion.SelectedValue = listaEditModulo[0].idUbicacion.ToString();
            if (listaEditModulo[0].idTipoModulo == 1)
            {
                chkVacacional.Checked = true;
            }
            else
            {
                chkVacacional.Checked = false;
            }
            Session["idModulo"] = id;
            lblvalida.Text = string.Empty;
            lblvalida.Visible = false;
            EditarModulo();

        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //CargaGrid();
            //LimpiarFormulario();
            //CargarComboboxes();
            //NuevoModulo();
            //Response.Redirect("UI_NewModule.aspx");
           
        }

        //protected void gvModulos_RowCommand(object sender, GridViewCommandEventArgs e)
        //{
        //    if (e.CommandName=="Select")
        //    {
        //        int index = Convert.ToInt32(e.CommandArgument);
        //        int id = Convert.ToInt32(gvModulos.DataKeys[index].Value);
        //        lblvalida.Text = id.ToString();
        //    }
        //}
        private void CargaGrid()
        {
            //ListadoHorarios olistadoHorarios = new ListadoHorarios();
            //gvHorarios.DataSource = olistadoHorarios.getHorariosGirdview();
            //gvHorarios.DataBind();
            Modulos om = new Modulos();
            GridView1.DataSource = om.getHorariosAndModulos();
            GridView1.DataBind();
            if (GridView1.Rows.Count > 0)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_GridView1", GridView1.Rows[0].Cells.Count), true);

        }

        private void LimpiarFormulario()
        {
            txtCiclo.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtFechaFin.Text = string.Empty;
            txtFechaInicio.Text = string.Empty;
            chkVacacional.Checked = false;
        }

        private void CargarComboboxes()
        {
            ListadoHorarios olistadoHorarios = new ListadoHorarios();
            List<Horarios> lista = new List<Horarios>();
            olistadoHorarios.idEstado = 1;
            lista = olistadoHorarios.getHorarios();
            lista.Insert(0, new Horarios() { idHorario = 0, horario = "<Seleccione un Horario>" });
            cmbListadoHorarios.DataSource = lista;
            cmbListadoHorarios.DataTextField = "horario";
            cmbListadoHorarios.DataValueField = "idHorario";
            cmbListadoHorarios.DataBind();
            ListadoDocentes oListadoDocentes = new ListadoDocentes();
            List<Docentes> listaDocentes = new List<Docentes>();
            oListadoDocentes.estado = "Activo";
            listaDocentes = oListadoDocentes.getDocentes();
            listaDocentes.Insert(0, new Docentes() { valorID = 0, nombresYApellidos = "< Seleccione un Docente >" });
            //lista.Insert(0, new Docentes() { valorID = 0, descripcion = "< Seleccione un Docente >" });
            cmbDocentes.DataSource = listaDocentes;
            cmbDocentes.DataTextField = "nombresYApellidos";
            cmbDocentes.DataValueField = "valorID";
            cmbDocentes.DataBind();
            ListadoUbicacionModulo oListadoUbicaciones = new ListadoUbicacionModulo();
            List<UbicacionModulos> listaUbicaciones = new List<UbicacionModulos>();
            oListadoUbicaciones.idEstado = 1;
            listaUbicaciones = oListadoUbicaciones.getUbicaciones();
            listaUbicaciones.Insert(0, new UbicacionModulos() {idUbicacion=0,descripcionUbicacion="< Seleccione una Ubicacion >"});
            cmbUbicacion.DataSource = listaUbicaciones;
            cmbUbicacion.DataTextField = "descripcionUbicacion";
            cmbUbicacion.DataValueField = "idUbicacion";
            cmbUbicacion.DataBind();
            
        }

        private void EditarModulo()
        {
            btnCancelar.Visible = true;
            btnGuardarModulo.Text = "Editar Módulo";
            txtCiclo.Enabled = false;
            txtFechaFin.Enabled = false;
            txtFechaInicio.Enabled = false;
        }
        private void NuevoModulo()
        {
            btnGuardarModulo.Text = "Guardar Módulo";
            btnCancelar.Visible = false;
            txtCiclo.Enabled = true;
            txtFechaFin.Enabled = true;
            txtFechaInicio.Enabled = true;
        }

        //protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        //{
        //    GridView1.PageIndex = e.NewPageIndex;
        //    CargaGrid();
        //    lblvalida.Visible = false;
            
           
        //}

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                string mensaje = "";
                Modulos oModulo = new Modulos();
                int index = Convert.ToInt32(e.RowIndex);
                int id = (int)GridView1.DataKeys[index].Value;
                oModulo.idModulo = id;
                mensaje = oModulo.DeleteModule();
                lblvalida.Text = mensaje;
                lblvalida.Visible = true;
                lblvalida.ForeColor = Color.Green;
                CargaGrid();
                LimpiarFormulario();
                CargarComboboxes();
                NuevoModulo();
            }
            catch (Exception)
            {

                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR REVISE SI EL DOCENTE EXISTE ACTIVO')", true);    

            }
            
        }
        private void CrearReporte()
        {

            EspamIdiomasDataSet.sp_getModulosAndHorariosDataTable dt = new EspamIdiomasDataSet.sp_getModulosAndHorariosDataTable();
            EspamIdiomasDataSetTableAdapters.sp_getModulosAndHorariosTableAdapter da = new EspamIdiomasDataSetTableAdapters.sp_getModulosAndHorariosTableAdapter();
            da.Fill(dt);

            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "DataSet1";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/ReporteModulosPorHorarioCompleto.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "ReporteModulosPorHorarioCompleto.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/ReporteModulosPorHorarioCompleto.rdlc");
            viewer.LocalReport.Refresh();

            string mimeType;
            string encoding;
            string fileNameExtension;
            string[] streams;
            Warning[] warnings;
            byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

            this.Response.Clear();
            this.Response.ContentType = "application/pdf";
            this.Response.AddHeader("Content-disposition", "attachment; filename=ReporteModulosPorHorarioCompleto.pdf");
            this.Response.BinaryWrite(pdfContent);
            this.Response.End();
        }


        protected void Button1_Click(object sender, EventArgs e)
        {
            CrearReporte();
        }

        protected void GridView1_Load(object sender, EventArgs e)
        {
            if (GridView1.Rows.Count > 0)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_GridView1", GridView1.Rows[0].Cells.Count), true);
        }

        protected void GridView1_PreRender(object sender, EventArgs e)
        {
            GridView GridView1 = (sender) as GridView;
            if (GridView1.Rows.Count > 0)
            {
                //This replaces <td> with <th> and adds the scope attribute
                GridView1.UseAccessibleHeader = true;

                //This will add the <thead> and <tbody> elements
                GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;

                //This adds the <tfoot> element. 
                //Remove if you don't have a footer row
                GridView1.FooterRow.TableSection = TableRowSection.TableFooter;
            }
        }
}
}